package ms.demo004;

import java.util.HashMap;

/**
 * 在java中一个HashMap要put一个对象，存进去之后，把该对象设为null，遍历该HashMap后还是可以输出之前对象的值.
 * 仅仅是改变该对象指向null，并不能改变已经存入HashMap的引用指向。
 */
public class Client2 {
    public static void main(String[] args) {

        /**
         * 比如Person p1 = new Person(), p2;
         * p1.Name = "a";
         * p2 = p1; // 将p1指向的引用地址复制给p2，p2也指向 new Person()内存区域
         * 那么
         * p1 = null; 仅仅是将p1指向null，p2还是指向 new Person()的内存区域引用
         * p2并不会变成null
         * 但是
         * p1.Name ="b";
         * p2的Name也会变成b
         */
        HashMap<String, Person> hashMap = new HashMap<>();

        Person p = new Person("zs", 18);
        hashMap.put("zs",p);
        p = null;
        p.setAge(1);


        hashMap.forEach((x,y)->{
            System.out.println(x+"="+y);
        });
    }
}

class Person{
    private String name;
    private Integer age;

    public Person(){}

    public Person(String name, Integer age){
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
